package demo;

import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;
import groovy.util.ResourceException;
import groovy.util.ScriptException;
import org.junit.Test;

import java.io.IOException;

public class GroovyScriptEngineDemo {
    /**
     * 如果开发人员想把Groovy脚本嵌入到服务器内，并且在脚本变更之后也能够重新加载，GroovyScriptEngine是一个主要的解决方案。
     * 你可以使用一个CLASSPATH集合（url或者路径名称）初始化GroovyScriptEngine，之后便可以执行这些路径中的Groovy脚本了。
     * GroovyScriptEngine同样可以跟踪相互依赖的脚本，如果其中一个被依赖的脚本发生变更，则整个脚本树都会被重新编译和加载。
     * <p>
     * 此外，每次脚本的执行，还可以利用一个脚本可以访问的包含了最新参数的Binding对象传递信息。
     *
     * @throws IOException
     * @throws ResourceException
     * @throws ScriptException
     */
    @Test
    public void test() throws IOException, ResourceException, ScriptException {

        String[] roots = new String[]{"D:/Stan/workspace/javaDemo/Demo/groovy/src/main/groovy/demo/"};

        GroovyScriptEngine groovyScriptEngine = new GroovyScriptEngine(roots);

        Binding binding = new Binding();
        binding.setVariable("input", "world");

        groovyScriptEngine.run("hello.groovy", binding);
        System.out.println(binding.getVariable("output"));
    }
}
